#ifndef EXPRESSION_H
#define EXPRESSION_H

#include "tensor.h"
#include <map>
#include <string>
#include <vector>

class evaluation;

class expression {
  friend class evaluation;

public:
  expression(int expr_id, const char *op_name, const char *op_type, int *inputs,int num_inputs);

  void add_op_param_double(const char *key, double value);

  void add_op_param_ndarray(const char *key, int dim, size_t shape[],double data[]);

private:
  int expr_id_;
  std::string op_name_;
  std::string op_type_;
  std::vector<int> inputs_;
  std::map<std::string, tensor> result_wb;;
  std::map<std::string,int> ker_and_str; 
  tensor result_;
}; // class expression

#endif // EXPRESSION_H
